package com.yuw.collectionsdemo;

import java.util.*;

public class SetTestDriver {
    public static void main(String[] args) {

        testSet03();
    }

    /**
     * Set集合的使用：LinkedHashSet
     */
    private static  void testSet03(){
        // 创建一个Set实现类的实例对象
        // 多态（父类指代子类）
        // 面向接口的编程
        Set set0 = new TreeSet(); // 原始初始化长度为16
        // 向Set集合中添加元素
        set0.add("zhangsan");
        set0.add("lisi");
        set0.add("lisi");
        // set0.add(null);
        set0.add("wangwu");
        System.out.println("使用迭代器进行遍历：");
        // 遍历Set集合中的元素，并进行输出
        // 使用迭代器进行迭代遍历
        // 获取HashSet的迭代器对象
        Iterator it =  set0.iterator();
        // 使用hasNext方法判断有没有可以迭代遍历的元素，
        // 如果为true，则说明还有元素，可以继续迭代遍历
        while(it.hasNext()){
            // 使用迭代器的Next方法获取当前遍历的元素对象
            // 因为迭代器是从第一个元素之前的位置开始进行迭代判定
            Object obj = it.next();
            // 输出取出的元素内容
            System.out.println("  "+ (obj == null ?"null":obj.toString()));
        }

        System.out.println("使用增强型的for循环进行遍历：");
        // 执行流程：使用临时遍历obj从集合对象set0中依次取出元素对象，不用担心越界问题
        int count= 0; // 手动计数器
        for (Object obj:set0) {
            // 取出当前遍历的元素对象
            String strObj = obj == null ?"null":obj.toString();
            System.out.println("  "+ strObj);
            // 自定义计数器
            count++;
        }
    }
    /**
     * Set集合的使用：LinkedHashSet
     */
    private static  void testSet02(){
        // 创建一个Set实现类的实例对象
        // 多态（父类指代子类）
        // 面向接口的编程
        Set set0 = new LinkedHashSet(); // 原始初始化长度为16
        // 向Set集合中添加元素
        set0.add("zhangsan");
        set0.add("lisi");
        set0.add("lisi");
        set0.add(null);
        set0.add("wangwu");
        System.out.println("使用迭代器进行遍历：");
        // 遍历Set集合中的元素，并进行输出
        // 使用迭代器进行迭代遍历
        // 获取HashSet的迭代器对象
        Iterator it =  set0.iterator();
        // 使用hasNext方法判断有没有可以迭代遍历的元素，
        // 如果为true，则说明还有元素，可以继续迭代遍历
        while(it.hasNext()){
            // 使用迭代器的Next方法获取当前遍历的元素对象
            // 因为迭代器是从第一个元素之前的位置开始进行迭代判定
            Object obj = it.next();
            // 输出取出的元素内容
            System.out.println("  "+ (obj == null ?"null":obj.toString()));
        }

        System.out.println("使用增强型的for循环进行遍历：");
        // 执行流程：使用临时遍历obj从集合对象set0中依次取出元素对象，不用担心越界问题
        int count= 0; // 手动计数器
        for (Object obj:set0) {
            // 取出当前遍历的元素对象
            String strObj = obj == null ?"null":obj.toString();
            System.out.println("  "+ strObj);
            // 自定义计数器
            count++;
        }
    }
    /**
     * Set集合的使用：HashSet
     */
    private static  void testSet01(){
        // 创建一个Set实现类的实例对象
        // 多态（父类指代子类）
        // 面向接口的编程
        Set set0 = new HashSet(); // 原始初始化长度为16
        // 向Set集合中添加元素
        set0.add("zhangsan");
        set0.add("lisi");
        set0.add("lisi");
        set0.add(null);
        set0.add("wangwu");
        System.out.println("使用迭代器进行遍历：");
        // 遍历Set集合中的元素，并进行输出
        // 使用迭代器进行迭代遍历
        // 获取HashSet的迭代器对象
        Iterator it =  set0.iterator();
        // 使用hasNext方法判断有没有可以迭代遍历的元素，
        // 如果为true，则说明还有元素，可以继续迭代遍历
        while(it.hasNext()){
            // 使用迭代器的Next方法获取当前遍历的元素对象
            // 因为迭代器是从第一个元素之前的位置开始进行迭代判定
            Object obj = it.next();
            // 输出取出的元素内容
            System.out.println("  "+ (obj == null ?"null":obj.toString()));
        }

        System.out.println("使用增强型的for循环进行遍历：");
        // 执行流程：使用临时遍历obj从集合对象set0中依次取出元素对象，不用担心越界问题
        int count= 0; // 手动计数器
        for (Object obj:set0) {
            // 取出当前遍历的元素对象
            String strObj = obj == null ?"null":obj.toString();
            System.out.println("  "+ strObj);
            // 自定义计数器
            count++;
        }
    }
}
